//package org.example.douying;
//
//import javax.imageio.ImageIO;
//import java.awt.*;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.io.IOException;
//
//public class FollowUp {
//
//    /**
//     * 是否改变目标背景画布再次查找
//     * @param keyImagePath
//     */
//    public FindRobot(String keyImagePath,String screenshot,int x , int y) {
//
//        //开始查找
//        this.findImageXY(x,y);
//    }
//
//    /**
//     * 根据BufferedImage获取图片RGB数组
//     *
//     * @param bfImage
//     * @return
//     */
//    public int[][] getImageGRB(BufferedImage bfImage) {
//        int width = bfImage.getWidth();
//        int height = bfImage.getHeight();
//        int[][] result = new int[height][width];
//        for (int h = 0; h < height; h++) {
//            for (int w = 0; w < width; w++) {
//                //使用getRGB(w, h)获取该点的颜色值是ARGB，而在实际应用中使用的是RGB，所以需要将ARGB转化成RGB，即bufImg.getRGB(w, h) & 0xFFFFFF。
//                result[h][w] = bfImage.getRGB(w, h) & 0xFFFFFF;
//            }
//        }
//        return result;
//    }
//
//    /**
//     * 从本地文件读取目标图片
//     *
//     * @param keyImagePath - 图片绝对路径
//     * @return 本地图片的BufferedImage对象
//     */
//    public BufferedImage getBfImageFromPath(String keyImagePath) {
//        BufferedImage bfImage = null;
//        try {
//            bfImage = ImageIO.read(new File(keyImagePath));
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//        return bfImage;
//    }
//
//    /**
// * 获取全屏幕截图
// *
// * @return 返回全屏幕截图的BufferedImage对象
// */
//public BufferedImage getFullScreenShot() {
//     BufferedImage bfImage = null;
//     // 获取屏幕分辨率大小
//     Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
//     int width = (int) screenSize.getWidth();
//     int height = (int) screenSize.getHeight();
//     try {
//         Robot robot = new Robot();
//         // 捕获整个屏幕的屏幕截图
//         bfImage = robot.createScreenCapture(new Rectangle(0, 0, width, height));
//     } catch (AWTException e) {
//         e.printStackTrace();
//     }
//     return bfImage;
// }
//
//
//    /**
//     * 查找图片
//     * @Param keyImagePath 目标文件路径
//     *
//     */
//    public void findImageXY(String keyImagePath,int a ,int b) {
//        BufferedImage screenShotImage = this.getFullScreenShot();
//        BufferedImage keyImage = this.getBfImageFromPath(keyImagePath);
//        int[][] screenShotImageRGBData = this.getImageGRB(screenShotImage);
//        int[][] keyImageRGBData = this.getImageGRB(keyImage);
//        int scrShotImgWidth = screenShotImage.getWidth();
//        int scrShotImgHeight = screenShotImage.getHeight();
//        int keyImgWidth = keyImage.getWidth();
//        int keyImgHeight = keyImage.getHeight();
//
//        //遍历屏幕截图像素点数据
//        for (int y = b; y < scrShotImgHeight - keyImgHeight; y++) {
//            for (int x = 0; x < scrShotImgWidth - keyImgWidth; x++) {
//                //根据目标图的尺寸，得到目标图四个角映射到屏幕截图上的四个点，
//                //判断截图上对应的四个点与图B的四个角像素点的值是否相同，
//                //如果相同就将屏幕截图上映射范围内的所有的点与目标图的所有的点进行比较。
//                if ((keyImageRGBData[0][0] ^ screenShotImageRGBData[y][x]) == 0
//                        && (keyImageRGBData[0][keyImgWidth - 1] ^ screenShotImageRGBData[y][x + keyImgWidth - 1]) == 0
//                        && (keyImageRGBData[keyImgHeight - 1][keyImgWidth - 1] ^ screenShotImageRGBData[y + keyImgHeight - 1][x + keyImgWidth - 1]) == 0
//                        && (keyImageRGBData[keyImgHeight - 1][0] ^ screenShotImageRGBData[y + keyImgHeight - 1][x]) == 0) {
//
//                    boolean isFinded = isMatchAll(y, x);
//                    //如果比较结果完全相同，则说明图片找到，填充查找到的位置坐标数据到查找结果数组。
//                    if (isFinded) {
//                        //0
//                        int minY = y;
//                        int maxY = y + keyImgHeight;
//                        findY = ((minY + maxY) / 2);
//                        //1
//                        int minX = x;
//                        int maxX = x + keyImgWidth;
//                        findX = ((minX + maxX) / 2);
//                        //System.out.println("找到第"+findX+"次");
//                        map.put("point_"+findX+"_"+findY,findX+","+findY);
//                        //return;
//                    }
//                }
//            }
//        }
//    }
//
//    /**
//     * 判断屏幕截图上目标图映射范围内的全部点是否全部和小图的点一一对应。
//     *
//     * @param y - 与目标图左上角像素点想匹配的屏幕截图y坐标
//     * @param x - 与目标图左上角像素点想匹配的屏幕截图x坐标
//     * @return
//     */
//    public boolean isMatchAll(int y, int x) {
//        int biggerY = 0;
//        int biggerX = 0;
//        int xor = 0;
//        for (int smallerY = 0; smallerY < keyImgHeight; smallerY++) {
//            biggerY = y + smallerY;
//            for (int smallerX = 0; smallerX < keyImgWidth; smallerX++) {
//                biggerX = x + smallerX;
//                if (biggerY >= scrShotImgHeight || biggerX >= scrShotImgWidth) {
//                    return false;
//                }
//                xor = keyImageRGBData[smallerY][smallerX] ^ screenShotImageRGBData[biggerY][biggerX];
//                if (xor != 0) {
//                    //hitMiss++;
//                    return false;
//                }
//            }
//            //biggerX = x;
//        }
//
//        return true;
//    }
//}
